package jdk.utils;

import org.apache.commons.lang3.RandomUtils;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * 集合线程不安全 HashSet，HashSet是一个没有重复元素的集合，它通过HashMap实现的，只适用于单线程。
 * value 是一个Object 对象引用。
 */
public class Set_Study {


    volatile static Set<Integer> hashSet = new HashSet<>();

    volatile static Set<Integer> synchronizationSet = Collections.synchronizedSet(hashSet);

    //底层使用CopyOnWriteArrayList 实现的  add 元素时候，使用addifAbsent(E e) 判断是否存在，如果不存在才添加
    volatile static Set<Integer> arrSet = new CopyOnWriteArraySet<>();

    public static void main(String[] args) {
        for (int k = 0; k < 500; k++) {
            new Thread(() -> {
                arrSet.add(RandomUtils.nextInt(0, 80));
            }, String.valueOf(k)).start();

        }
        while (Thread.activeCount() > 2) {
            Thread.yield();
        }
        System.out.println(hashSet);
    }
}
